// 这是一个在参数指定文件中连续写入当前时间的应用
// 每隔一分钟在当前目录下建立一个新文件，通过对tm_sec是否为0来判断
// 文件以1秒为时间间隔，将当前的时间写入文件，然后回车换行
// 这是一个使用lseek在一个中连续写入字符串的应用

#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <string.h>
#include <unistd.h>
#include <sys/time.h>
#include <time.h>
int main(int argc, char *argv[]){

	struct timeval timeold,timenow;	// 定义时间结构体变量
	
	struct timezone timez;		// 定义timezone变量
	
	struct tm *p;			// 时间结构体指针

	// 定义文件描述符
	int fd,j=0;		

	// 定义时间结构体
	time_t filetime,timetemp;

	// seektemp用来记录插入链接位置
	int temp, seektemp=0, seeklength=0;

	// writetimebuf用来记录读取的时间,timebuf用来记录分钟，如果超过1分钟，则进行下一步操作
	char writetimebuf[50],timebuf[10],timebuf2[10];

	// writebuf用来记录写入文件的内容
	char writebuf[50],filename[20]="File";

	// 用来拼接回车换行符
	char getline[] = "\r\n";
	/*
	// 获取系统时间
	time(&timetemp);

	printf("The current time is %s\n", asctime(gmtime(&timetemp)));

	p = localtime(&timetemp);

	// 讲时、分、秒信息按照2位前端补0的方法格式化写入timebuf中
	sprintf(timebuf,"%02d%02d%02d",p->tm_hour,p->tm_min,p->tm_sec);
	*/
	while(j<5){
		
		/*
		// 讲当前时间写入writetimebuf中
		writetimebuf += p->tm_year;
		//writetimebuf += p->tm_mon;

		writetimebuf += p->tm_mday;
		writetimebuf += p->tm_hour;
		writetimebuf += p->tm_min;
		writetimebuf += p->tm_sec;
		writetimebuf += getline;
		*/
		strcpy(filename,"File");
		// 获得当前时间
		gettimeofday(&timeold,&timez);

		time(&timetemp);
		p = localtime(&timetemp);
		// 讲时、分、秒信息按照2位前端补0的方法格式化写入timebuf中
		sprintf(timebuf,"%02d%02d%02d",p->tm_hour,p->tm_min,p->tm_sec);
	
		//strcat(timebuf,getline);
		strcat(filename,timebuf);

		// 每隔一分钟创建一个文件
		fd = open(filename, O_RDWR|O_CREAT, S_IRWXU);
		
		if(fd == -1){
			printf("The file create filure!\n");
			return -1;
		}
		printf("The filename %s is successful\n", filename);

		// 获得最新时间
		time(&timetemp);

		sprintf(writebuf,"%s", ctime(&timetemp));

		while(1){
			
			// gettimeofday 得到的为1970年1月1日到现在的时间
			gettimeofday(&timenow,&timez);
			//timeold = timenow;
			
			// 判断两个时间的间隔是否超过1min
			// 当时间为0秒时，tv_sec=00,此时timenow_tv.sec - timeold.tv_sec = -59
			if(timenow.tv_sec - timeold.tv_sec == 1 ){
				
				time(&timetemp);
				sprintf(writebuf,"%s",ctime(&timetemp));
				//gettimeofday(&timenow,&timez);
					
				temp = lseek(fd,seeklength,SEEK_CUR);
				temp = write(fd, writebuf, strlen(writebuf));
				seeklength += strlen(writebuf);
				printf("the second is: %d\n",timenow.tv_sec);	
				//gettimeofday(&timenow,&timez);
				timeold = timenow;
				if(timeold.tv_sec%60 == 0){
					break;
				}
			}
		}
		printf("j=%d\n",j);
		gettimeofday(&timenow,&timez);
		timeold = timenow;

		j++;
	}
	return 0;

}


